package com.zpself.module.basic.集合.map;

import java.util.HashMap;
/**
 *  复习hashMap源码
 *  see https://zhuanlan.zhihu.com/p/133923068
 * @author  ZengPeng
 * @date  2021/2/20
 **/
public class HashMap_Code {
    private static final int MAXIMUM_CAPACITY = 1<<30;

    public static void main(String[] args) {

        HashMap<String ,String> hashMap = new HashMap<>();
        tableSizeFor(14);

        tableSize(0);//扩容

    }
    /**
     * 扩容门槛为传入的初始容量往上取最近的2的n次方
     * @param cap  初始容量
     * @return 2的n次方  n为正整数
     */
    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        System.out.println(Integer.toBinaryString(n));
        n |= n >>> 1;
        System.out.println(Integer.toBinaryString(n));
        n |= n >>> 2;
        System.out.println(Integer.toBinaryString(n));
        n |= n >>> 4;
        System.out.println(Integer.toBinaryString(n));
        n |= n >>> 8;
        System.out.println(Integer.toBinaryString(n));
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= 1 << 30) ? 1 << 30 : n + 1;
    }


    /**
     * 扩容
     * 最大容量 1 << 30  ：可能位运算比较快吧
     * @param cap  初始容量
     * @return 2的n次方  n为正整数
     */
    static final int tableSize(int cap) {
        System.out.println(1 << 31);
        //0000 0000 0000 0000 0000 0000 0000 0001
        System.out.println(Integer.toBinaryString(1));
        System.out.println(Integer.toBinaryString(1 << 30));
        System.out.println(Integer.toBinaryString(1 << 31));
        return  1<<30;
    }















}
